#include <stdio.h>  
#include <stdlib.h>  
  
// 函数指针节点  
typedef struct FunctionNode {  
    void (*function)(void);  
    struct FunctionNode *next;  
} FunctionNode;  
  
// 封装了函数链表和迭代器的结构体  
typedef struct FunctionList {  
    FunctionNode *head;  
    FunctionNode *current; // 用于迭代器的当前位置  
} FunctionList;  
  
// 创建一个新的函数节点  
FunctionNode* create_function_node(void (*func)(void)) {  
    FunctionNode *node = (FunctionNode *)malloc(sizeof(FunctionNode));  
    if (!node) return NULL;  
    node->function = func;  
    node->next = NULL;  
    return node;  
}  
  
// 初始化FunctionList  
void init_function_list(FunctionList *list) {  
    list->head = NULL;  
    list->current = NULL;  
}  
  
// 注册函数到链表  
void register_function(FunctionList *list, void (*func)(void)) {  
    FunctionNode *new_node = create_function_node(func);  
    if (!new_node) return;  
  
    if (!list->head) {  
        list->head = new_node;  
    } else {  
        FunctionNode *current = list->head;  
        while (current->next) {  
            current = current->next;  
        }  
        current->next = new_node;  
    }  
}  
  
// 重置迭代器到链表开头  
void reset_iterator(FunctionList *list) {  
    list->current = list->head;  
}  
  
// 移动迭代器到下一个函数（如果存在）  
void next(FunctionList *list) {  
    if (list->current) {  
        list->current = list->current->next;  
    }  
}  
  
// 检查迭代器是否完成（即是否到达链表的末尾）  
int is_done(const FunctionList *list) {  
    return !list->current;  
}  
  
// 执行当前迭代器指向的函数  
void execute_current(FunctionList *list) {  
    if (list->current) {  
        list->current->function();  
    }  
}  
  
// 销毁并释放FunctionList及其所有FunctionNode的内存  
void destroy_function_list(FunctionList *list) {  
    FunctionNode *current = list->head;  
    while (current) {  
        FunctionNode *next = current->next;  
        free(current);  
        current = next;  
    }  
    list->head = NULL;  
    list->current = NULL;  
}  
  
// 示例函数  
void print1() { printf("1 \n"); }  
void print2() { printf("2 \n"); }  
void print3() { printf("3 \n"); }  

  
int main() {  
    FunctionList list;  
    init_function_list(&list);  
  
    // 注册函数  
    register_function(&list, print1);  
    register_function(&list, print2);  
    register_function(&list, print3);  
  
    // 重置迭代器  
    reset_iterator(&list);  
  
    // 使用迭代器遍历并执行函数  
    while (!is_done(&list)) {  
        execute_current(&list);  
        next(&list);  
    }  
  
    // 销毁并释放内存  
    destroy_function_list(&list);  
  
    return 0;  
}